Database management systems frequently use multi-version concurrency control (MVCC) to provide high concurrency and snapshot read consistency. MVCC index support is critical for performance and scalability. For example, efficient index support is critical to database performance and scalability. B+-tree (or B-tree) are commonly used in databases for indexes. Due to high concurrency requirements, operations on B-tree indexes are quite sophisticated.
There are a few approaches to support multi-version in indexes. Some are drastically different from the standard B-tree. Others treat the index pages the same way as the data pages and use UNDO to get history images—either page-based or row-based undo. Due to B-tree page split, page UNDO is not always straight-forward. Thus, although MVCC index support is critical, efficient index MVCC support has been challenging.